package com.example.springmvcdemo.controller;

import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;

@RestController
@RequestMapping("/request")
public class RequestController {
    //采用servlet的方式获取cookie,可以一次性获取到全部的cookie
    //HttpServletRequest都是servlet的内置对象,可以直接进行获取
    @RequestMapping("/getCookie")
    public String getCookie(HttpServletRequest request) {
        Cookie[] cookies = request.getCookies();

        if (cookies != null) {
            Arrays.stream(cookies).forEach(x-> System.out.println(x.getName() + " : " + x.getValue()));
            return "获取Cookie成功";
        }

        return "获取Cookie为空";
    }

    //采用Spring的注解来获取cookie,但是只能获取到指定的cookie
    @RequestMapping("/getCookie2")
    public String getCookie2(@CookieValue(value = "test") String test) {
        return "获取的test : " + test;
    }

    //设置session
    @RequestMapping("/setSession")
    public String setSession(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute("userName", "李四");
        return "设置Session成功";
    }

    //通过Servlet的方式来获取session
    @RequestMapping("/getSession1")
    public String getSession1(HttpServletRequest request) {
        HttpSession session = request.getSession();
        String username = (String) session.getAttribute("userName");
        return "登录用户是: " + username;
    }

    @RequestMapping("/getSession2")
    public String getSession2(HttpSession session) {
        String username = (String) session.getAttribute("userName");
        return "登录用户是: " + username;
    }

    //通过Spring的注解来获取session
    @RequestMapping("/getSession3")
    public String getSession3(@SessionAttribute(value = "userName", required = false) String username) {
        return "登录用户是: " + username;
    }

    //通过Servlet的方式来获取http报头属性
    @RequestMapping("/getHeader")
    public String getHeader(HttpServletRequest request) {
        String userAgent = request.getHeader("User-Agent");
        return "userAgent:"+userAgent;
    }

    //通过Spring的注解来获取http报头属性
    @RequestMapping("/getHeader2")
    public String getHeader2(@RequestHeader(value = "User-Agent") String userAgent) {
        return "userAgent:"+userAgent;
    }

//    cookie和session的区别
//    Cookie和Session的区别Cookie是客户端保存用户信息的一种机制
//    Session是服务器端保存用户信息的一种机制
//    Cookie和Session之间主要是通过Sessionld关联起来的,Sessionld是Cookie和Session之间的桥梁
//    Cookie和Session经常会在一起配合使用
//    但是不是必须配合.完全可以用Cookie来保存一些数据在客户端.这些数据不一定是用户身份信息也不一定是Sessionld
//    Session中的sessionld也不需要非得通过Cookie/Set-Cookie传递，比如通过URL传递
//    Session默认是保存在内存中的.如果重启服务器则Session数据就会丢失
}
